# -*- coding: utf-8 -*-

from django.db import models
from django.core.validators import MaxValueValidator, MinValueValidator

####################################################################################################################################
####################################################################################################################################
###########################    Модель для взаимодействия с собственной базой программы        ######################################
####################################################################################################################################
####################################################################################################################################

class Update(models.Model):
	upd_id = models.AutoField(primary_key=True,verbose_name="Идентификатор апдейта")
	upd_type = models.PositiveIntegerField(choices=((0,'База студентов'),(1,'База средних оценок'),(2, 'База курсов'),(3,'База оценок по компетенциям')),verbose_name="Тип апдейта")
	upd_date = models.DateField(verbose_name="Дата апдейта")
	def __unicode__(self):
		return unicode(self.upd_date)
	class Meta:
		db_table = "Updates"
		verbose_name = "Апдейт"
		verbose_name_plural = "Апдейты"


class Course(models.Model):
	crs_id = models.AutoField(primary_key=True,verbose_name="Идентификатор курса")
	crs_name = models.CharField(max_length=254,verbose_name="Название курса")
	crs_shortname = models.CharField(blank=True,max_length=100,verbose_name="Короткое название курса")
	hours_lect = models.PositiveIntegerField(default=0,null=True,verbose_name="Часы лекций")
	hours_pract = models.PositiveIntegerField(default=0,null=True,verbose_name="Часы семинаров")
	hours_lab = models.PositiveIntegerField(default=0,null=True,verbose_name="Часы лабораторных работ")
	hours_self = models.PositiveIntegerField(default=0,null=True,verbose_name="Часы самостоятельной работы")
	crs_project = models.BooleanField(default=False,verbose_name="Курсовой проект")
	control_type = models.BooleanField(default=False,blank=True,verbose_name="Наличие экзамена")
	google_doc_name = models.CharField(max_length=63,blank=True,verbose_name="Имя GD документа")
	crs_name_lms_db = models.BigIntegerField(unique=True,verbose_name="Идентификатор курса в LMS")
	crs_description = models.TextField(max_length=255,blank=True,verbose_name="Описание")

	def __unicode__(self):
		return self.crs_name
	class Meta:
		db_table = "Courses"
		verbose_name = "Курс"
		verbose_name_plural = "Курсы"

class Competence(models.Model):
	cmpt_id = models.AutoField(primary_key=True,verbose_name="Идентификатор компетенции")
	cmpt_short_name = models.CharField(max_length=31,unique=True,verbose_name="Короткое название компетенции")
	cmpt_long_name = models.CharField(max_length=127,blank=True,verbose_name="Полное название компетенции")
	description = models.TextField(max_length=255,blank=True,verbose_name="Описание")

	def __unicode__(self):
		return self.cmpt_short_name
	class Meta:
		db_table = "Competences"
		verbose_name = "Компетенция"
		verbose_name_plural = "Компетенции"

class CompinCrs(models.Model):
	cc_id = models.AutoField(primary_key=True,verbose_name="Идентификатор компетенции в курсе")
	cmpt = models.ForeignKey(Competence,verbose_name="Компетенция")
	crs = models.ForeignKey(Course,verbose_name="Курс")
	cmpt_test_id = models.BigIntegerField(default=0,blank=True,verbose_name="Идентификатор теста по компетенции")
	percent = models.IntegerField(validators=[MaxValueValidator(100), MinValueValidator(1)],default=1,null=True,verbose_name="Вес от общего времени курса (в процентах)")
	eff_factor = models.IntegerField(default=0,validators=[MaxValueValidator(100), MinValueValidator(0)],null=True,verbose_name="Полнота изучения навыка в курсе (в процентах)")

	def __unicode__(self):
		return (unicode(self.crs) + '_' + unicode(self.cmpt))
	class Meta:
		db_table = "Competences_in_Courses"
		verbose_name = "Компетенция по курсу"
		verbose_name_plural = "Компетенции по курсам"

class Software(models.Model):
	sftwr_id = models.AutoField(primary_key=True,verbose_name="Идентификатор ПО")
	sftwr_name = models.CharField(max_length=31,unique=True,verbose_name="Название ПО")
	cmpt = models.ForeignKey(Competence,verbose_name="Компетенция")

	def __unicode__(self):
		return self.sftwr_name
	class Meta:
		db_table = "Learnt_Software"
		verbose_name = "Программный продукт"
		verbose_name_plural = "ПО"

class Profession(models.Model):
	prof_id = models.AutoField(primary_key=True,verbose_name="Идентификатор профессии")
	prof_name = models.CharField(max_length=63,unique=True,verbose_name="Название профессии")
	recommendation = models.TextField(max_length=511,blank=True,verbose_name="Рекоммендация")

	def __unicode__(self):
		return self.prof_name
	class Meta:
		db_table = "Professions"
		verbose_name = "Профессия"
		verbose_name_plural = "Профессии"

class CompforProf(models.Model):
	cp_id = models.AutoField(primary_key=True,verbose_name="Идентификатор компетенции в профессии")
	cmpt = models.ForeignKey(Competence,verbose_name="Компетенция")
	prof = models.ForeignKey(Profession,verbose_name="Профессия")
	importance = models.PositiveIntegerField(validators=[MaxValueValidator(100), MinValueValidator(1)], null=True,default=10,verbose_name="Важность компетенции для профессии (в процентах)")

	def __unicode__(self):
		return unicode(self.cp_id)
	class Meta:
		db_table = "Competences_for_Professions"
		verbose_name = "Компетенция для профессии"
		verbose_name_plural = "Компетенции для профессий"
		unique_together = ("cmpt","prof")

class Student(models.Model):
	stud_id = models.AutoField(primary_key=True,verbose_name="Идентификатор компетенции в профессии")
	firstname = models.CharField(max_length=100L,verbose_name="Имя")
	lastname = models.CharField(max_length=100L,verbose_name="Фамилия")
	mail = models.EmailField(max_length=100L,unique=True,verbose_name="E-mail")
	fb_login = models.EmailField(unique=True,max_length=100L,verbose_name="Логин Facebook")
	unique_number = models.BigIntegerField(unique=True,verbose_name="Идентификатор студента в LMS")

	def __unicode__(self):
		return (self.firstname + ' ' + self.lastname)
	class Meta:
		db_table = "Students"
		verbose_name = "Студент"
		verbose_name_plural = "Студенты"

class Mark(models.Model):
	mark_id = models.AutoField(primary_key=True,verbose_name="Идентификатор оценки")
	crs = models.ForeignKey(Course,verbose_name="Курс")
	stud = models.ForeignKey(Student,verbose_name="Студент")
	mark_final = models.PositiveIntegerField(default=0,validators=[MaxValueValidator(100), MinValueValidator(0)], verbose_name="Итоговая (по 100-бальной шкале)")
	mark_avg = models.PositiveIntegerField(default=0,validators=[MaxValueValidator(100), MinValueValidator(0)],verbose_name="Средняя (по 100-бальной шкале)")

	def __unicode__(self):
		return unicode(self.stud)
	class Meta:
		db_table = "Marks"
		verbose_name = "Оценка за курс"
		verbose_name_plural = "Оценки по предметам"
		unique_together = ("crs","stud")

class MarkforComp(models.Model):
	comp_mark_id = models.AutoField(primary_key=True,verbose_name="Идентификатор оценки")
	cc = models.ForeignKey(CompinCrs,verbose_name="Компетенция")
	stud = models.ForeignKey(Student,verbose_name="Студент")
	mark_comp = models.PositiveIntegerField(default=0,validators=[MaxValueValidator(100), MinValueValidator(0)], verbose_name="Оценка (по 100-бальной шкале)")

	def __unicode__(self):
		return unicode(self.stud)
	class Meta:
		db_table = "Marks_for_Competences"
		verbose_name = "Оценка по компетенции"
		verbose_name_plural = "Оценки по компетенциям"
		unique_together = ("cc","stud")

class Coefficient(models.Model):
	coef_id = models.AutoField(primary_key=True,verbose_name="Идентификатор коэффициента")
	coef_name = models.CharField(max_length=15,unique=True,verbose_name="Название коэффицента")
	coef_value = models.FloatField(verbose_name="Значение коэффициента")
	coef_description = models.TextField(max_length=255,verbose_name="Описание коэффицента")

	def __unicode__(self):
		return unicode(self.coef_name)
	class Meta:
		db_table = "Coefficients"
		verbose_name = "Коэффициент"
		verbose_name_plural = "Коэффициенты, используемые в программе"

####################################################################################################################################
####################################################################################################################################
####################################    Модель для взаимодействия с базой LMS        ###############################################
####################################################################################################################################
####################################################################################################################################

